/*************************************************************************
*                              起源太空
*
*------------------------------------------------------------------------
* 文件名：		ps_can.h
* 使用说明：
*           本文件用于ps
*------------------------------------------------------------------------
* 日期： 		2022.10.18
* 版本： 		V0.0
* 作者：		XXX
*------------------------------------------------------------------------
* 					修改 / 更新记录
*------------------------------------------------------------------------
* 日期： 		2022.10.18
* 版本： 		V0.1
* 修改人：		XXX
* 修改内容：	1.添加了XXX XXX 功能
*            	2.修改了XXX XXX 的错误
*------------------------------------------------------------------------
* 日期： 		2022.10.19
* 版本： 		V0.2
* 修改人：		XXX
* 修改内容：	1.添加了XXX XXX 功能
*           2.修改了XXX XXX 的错误
*************************************************************************/

#ifndef SRC_DRI_HAL_DRI_HAL_CAN_H_
#define SRC_DRI_HAL_DRI_HAL_CAN_H_


/*************************************************************************
*                             引用的头文件
*************************************************************************/
#include "xparameters.h"
#include "xcanps.h"
#include "xil_exception.h"
#include "sys.h"
#include "xscugic.h"


/*************************************************************************
*                               宏定义
*************************************************************************/

#define INTC_DEVICE_ID						XPAR_SCUGIC_SINGLE_DEVICE_ID

#define TEST_BTR_SYNCJUMPWIDTH				3
#define TEST_BTR_SECOND_TIMESEGMENT			2
#define TEST_BTR_FIRST_TIMESEGMENT			15

#define FRAME_DATA_LENGTH 					8

/* baund 500k=100M/10/(3+2+15) */
#define TEST_BRPR_BAUD_PRESCALAR	 		10-1

/* 标准帧下的receive_ID 设置 */
#define ID_STD_FILITER(IDstd)  				((IDstd)<<21)

/* 标准帧下的mark设置 */
#define MARK_STD(mark)     					(((mark)<<21)|0x03<<19)

#define CAN0_DEVICE_ID	      				XPAR_XCANPS_0_DEVICE_ID
#define CAN0_INTR_ID		  				XPAR_XCANPS_0_INTR

#define CAN1_DEVICE_ID	      				XPAR_XCANPS_1_DEVICE_ID
#define CAN1_INTR_ID		  				XPAR_XCANPS_1_INTR



#define TRANSFER_DATA_CAN_ID 0b0010


/* 遥测状态返回数据名称及其长度 */

/* 1.整机状态信息 */

/* 秒级时间 */
#define SECOND_BIT_LENGTH					32							
/* 毫秒级时间 */
#define MSECOND_BIT_LENGTH					32							
/* 命令序号 0-65535 */
#define COMMAND_NUM_BIT_LENGTH				16							
/* 启动方式，0-emmc, 1-flash */
#define START_MODE_BIT_LENGTH				1							
/* 升级状态，0：未升级          1：升级中 */
#define UPDATE_MODE_BIT_LENGTH				1	
/* 升级进度，0-100 */
#define UPGRADE_PROGESS_LENGTH				7

/* 2.相机一和相机二状态信息 */

/* 相机当前连接状态，0-未连接，1-已连接，2-低功耗 */
#define CAMERA_STATUS_BIT_LENGTH			2
/* 相机当前温度 */
#define CAMERA_TEMPERATURE_BIT_LENGTH		16
/* 相机曝光时间 */
#define CAMERA_EXPOSURE_BIT_LENGTH			32
/* 相机增益RGB */
#define CAMERA_GAIN_RGB_BIT_LENGTH			8
/* 相机EXGain */
#define CAMERA_GAIN_EX_BIT_LENGTH			16
/* 相机HGC/LGC */
#define CAMERA_GAIN_H_LGC_BIT_LENGTH		16
/* 相机Offset1 */
#define CAMERA_OFFSET_1_BIT_LENGTH			8
/* 相机Offset2 */
#define CAMERA_OFFSET_2_BIT_LENGTH			8
/* 相机图像配置，0-正常模式，1-固定序列，2-渐变测试图像 */
#define CAMERA_PIC_SET_BIT_LENGTH			2
/* 相机拍摄张数 */
#define CAMERA_SHOOT_NUM_BIT_LENGTH			4
/* PL工作模式，0-图像预处理模式，1-图像下行模式 */
#define CAMERA_PL_MODE_BIT_LENGTH			1
/* PL实际收到的图片数量 */
#define CAMERA_PL_RECV_PIC_BIT_LENGTH		4
/* 预处理模式下已处理的图片数量 */
#define CAMERA_HANDLE_PIC_NUM_BIT_LENGTH	4
/* 预处理模式下，动目标的数量 */
#define CAMERA_MOV_TARGET_NUM_BIT_LENGTH	4
/* 图像下行模式中，DDR中存储的图像数量 */
#define CAMERA_DDR_PIC_NUM_BIT_LENGTH		4
/* 图像下行模式中，LVDS接口读走的数量 */
#define CAMERA_LVDS_SEND_PIC_BIT_LENGTH		4
/* 每张图像3C的个数 */
#define CAMERA_PIC_3C_NUM_BIT_LENGTH		3
/* 连拍间隔时间,毫秒 */
#define CAMERA_SHOOT_TIME_BIT_LENGTH		4

/* 3.电机状态信息 */

/* 电机转动方向，0-关闭方向，1-打开方向 */
#define MOTOR_DIRECTION_BIT_LENGTH			1
/* 电机转动步数 */
#define MOTOR_STEPS_BIT_LENGTH				16

/* 4.定标版状态信息 */

/* LED开关状态, 0-关，1-开 */
#define LED_SWITCH_BIT_LENGTH				1
/* LED占空比 */
#define LED_DUTY_CYCLE_BIT_LENGTH			20
/* LED PWM计数 */
#define LED_PWM_FREQ_BIT_LENGTH				24

/* 5.FPGA相关状态信息 */

/* FPGA版本号，单数为flash版本，双数为emmc版本 */
#define FPGA_VER_BIT_LENGTH					4
/* FPGA时钟锁定状态，0-时钟未锁定，1-时钟锁定 */
#define FPGA_CLOCK_LOCK_BIT_LENGTH			1
/* FPGA芯片温度,-127-128 */
#define FPGA_TEMPERATURE_BIT_LENGTH			8
/* FPGA读寄存器地址 */
#define FPGA_READ_ADDR_BIT_LENGTH			16
/* FPGA读寄存器的值 */
#define FPGA_READ_REG_VALUE_BIT_LENGTH		32



/*************************************************************************
*                           全局变量 \ 引用
*************************************************************************/
typedef struct{
	u16 usSize;
	u8 uacData[500];
}S_tCanData;

XCanPs Can0, Can1;

/*CAN配置参数*/

typedef struct Can_config_parameters
{
    u8  can0_rst_flag;                      /* CAN0复位标识         */
    u8  can1_rst_flag;                      /* CAN1复位标识         */
    u8  can_bc_fail;                        /* CAN广播帧无效       */
    u8  can_conf_fail;                      /* CAN配置失败标识    */
    u16 can_pre_ID;                         /* CAN前一次通信ID */
    u16 can_bc_lastSN;                      /* CAN之前广播帧序号 */
    u16 can_bc_interval;                    /* CAN广播间隔            */
    u32 can_wait_cnt;                       /* CAN接收等待延时    */
} CAN_CONF_PARA;

CAN_CONF_PARA can_conf;              /* CAN总线配置参数    */

/*************************************************************************
*                              函数引用
*************************************************************************/
extern int PsCanInit(u16 usDeviceId, XCanPs *CanInstPtr,
				XScuGic *IntcInstancePtr, u16 usCanIntrId);
extern int PsCanInterruptSet(XScuGic *IntcInstancePtr, XCanPs *CanInstancePtr,
 						 u16 usCanIntrId);

#endif



